大道至简

Thinking will not overcome fear but action will.

Effective-谨慎使用重载

java

简介 重载有别于重写,重载是指相同的方法名,但参数不一样。Effective Java中提到重载方法之间的选择是静态的,而重写方法之间的选择是动态的。动态的意味着当自类包含与父类中相同签名的方法声明时,子类实例方法会调用子类的重写方法。 重载可能带来的问题 下面的程序是一个善意的尝试,根据集合类型进行分类,希望打印set,list,unknown collection: public cla...

Effective-泛型

Java 泛型

简介 使用泛型,你告诉编译器在每个集合中允许那些类型的对象。编译器会自动插入强制转换,并在编译时告诉你是否尝试插入错误类型的对象。我们在此讨论如何正确的使用泛型,以及相关的参数化,通配符。 术语:参数化类型:List<String>,实际参数类型:String,泛型类型:List<E>,形式类型参数:E,无限制通配符类型:List<?>,原始类型:List...

手写动态代理

动态代理 JavaJava

简介 Java 中的动态代理是为了解决“如何在不修改原始类的前提下,统一添加功能逻辑”,它通过运行时生成代理类,在方法调用时拦截请求,广泛应用于 AOP、RPC、ORM 等框架中。 场景 假设我现在有一个接口有三个方法: package main.java.tech.instight.proxy; public interface MyInterface { void func1(...

EffectiveJava-考虑实现Comparable接口

effective Java

考虑实现Comparable接口 类实现了Comparable接口,就可以和泛型算法以及依赖于接口的集合进行协作。如果你编写的一个它有明显的具有内在排序关系的类,那你就要考虑实现Comparable接口。 public interface Comparable<T> { public int compareTo(T o); } compareTo方法的通用约定与eq...

EffectiveJava-如何覆盖equals准则

effective Java

如何覆盖equals准则 equals方法是Object默认的方法用来比较两个类的实例是否相等,如果类满足以下两个条件,就可以完全依赖Object默认的equals: 每个对象本身就是唯一的比如Tread,socket,process,FileInputStream,这些天生就是独一无二的。 你不需要逻辑相等的概念,指的是两个对象的属性,或者状态相同,不是地址相同。(equals默...

EffectiveJava-使用私有构造函数或者枚举类型强制单例属性

静态工厂 单例 Java

使用私有构造函数或者枚举类型强制单例属性 简介 单例是一个只实例化一次的类。单例通常表示无状态对象或本质上唯一的系统组件。 有两种常见的方法实现单例,基于将构造函数保持私有,在公共静态成员一共对唯一实例的访问。 公共final实现单例 书上提供了一个经典的单例实现: // Singleton with public final field public class Elvis { ...

EffectiveJava-使用builder构造多参数构造函数

静态工厂 枚举 Java

考虑使用builder构造多参数构造函数 简介 你是否遇到过一个构造函数有很多个参数,每次创建新的实例都要仔细查看每一个参数是否对应,虽然这个问题现在很多的集成开发环境已经有了跟随你的参数给出提示的功能,但当你要一个可变的的参数列表应该怎么做会更好呢? Builder Pattern 下面我用一个例子表示如何实现一个建造者模式: public class Pizza{ priv...

EffectiveJava-考虑使用静态工厂方法代替构造函数

静态工厂 枚举 Java

考虑使用静态工厂方法代替构造函数 本节介绍Effective-Java中,第一条:使用静态工厂方法替代构造函数。 简介 传统方法获取实例的方式是使用默认的构造函数,另一种技术是使用公共的静态工厂方式。这是书中提供的一个简单的demo,将原始的布尔类型转为布尔对象的装箱类。 public static Boolean valueOf(boolean b) { return b ? Bool...

二叉树的非递归遍历

非递归 二叉树遍历

二叉树的非递归遍历 在常规的二叉树的遍历的三种方式中,先序,中序,后序遍历,均采用了递归的方式。如果采用递归的方式是如何操作的?我们都知道递归调用,其实离不开栈的使用,我们如果能手动模拟栈,就能使用非递归的方式进行遍历,接下来将分别写一下非递归遍历的伪代码。 先序遍历 void PreOrder(BiTree T){ InintStack(S); BiTree p = T; /...

Scrapy-太原理工大学校园卡信息

Scrapy Python

Scrapy-太原理工大学校园卡信息 最近啊因为疫情,每天在家双手寂寞难耐,不写点代码真的是太难受了。这段时间打算开发一个校园信息类的app,帮助大家免VPN查询成绩呀,课程呀,校园卡余额啦之类的。 我在上一篇博客已经介绍了我是如何对新的教务处接口动手动脚的,今天我又盯上了咱们的学生卡信息。一开始我也寻思这玩意好像除了去学校管理中心能查到其他地方也查不到呀,在学校的官网上一顿搜索我找到了...